package com.nowcoder.community.b_dao;


import com.nowcoder.community.a_entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * <p>——————————————————————————————————————————————-————
 * <p>   1级2级私信的全部sql
 * <p>  //mapper接口！！ 不是类
 * <p>——————————————————————————————————————————————-————
 */
@Mapper
@Repository
public interface MessageMapper {

    // 【分页 offset的末页特殊判断用】查询当前用户的会话数量.
    int selectConversationCount(@Param("userId")int userId);
    // 查询当前用户的会话列表,针对每个会话只返回一条最新的私信.
    List<Message> selectConversations(@Param("userId")int userId,
                                      @Param("offset")int offset,
                                      @Param("limit")int limit);




    // 【分页 offset的末页特殊判断用】查询某个会话所包含的私信数量.
    int selectLetterCount(@Param("conversationId")String conversationId);
    // 查询某个会话所包含的私信列表.
    List<Message> selectLetters(@Param("conversationId")String conversationId,
                                @Param("offset")int offset,
                                @Param("limit")int limit);




    // 查询未读私信的数量
    int selectLetterUnreadCount(@Param("userId")int userId,
                                @Param("conversationId")String conversationId);




    //发送私信
    void insertMessage(Message message);
    //更改未读->已读
    void updateStatus(@Param("idList")List<Integer>idList ,
                      @Param("status")int status);



    /**
     * <p>——————————————————————————————————————————————-————
     * <p> 系统通知
     * <p>——————————————————————————————————————————————-————
     */

    // 查询某个主题下最新的通知
    Message selectLatestNotice(@Param("userId")int userId,
                               @Param("topic")String topic);

    // 查询某个主题所包含的通知数量
    int selectNoticeCount(@Param("userId")int userId,
                          @Param("topic")String topic);

    // 查询未读的通知的数量
    int selectNoticeUnreadCount(@Param("userId")int userId,
                                @Param("topic")String topic);

    // 查询某个主题所包含的通知列表
    List<Message> selectNotices(@Param("userId")int userId,
                                @Param("topic")String topic,
                                @Param("offset")int offset,
                                @Param("limit")int limit);


}
